home *** CD-ROM | disk | FTP | other *** search
/ Software of the Month Club 2000 October / Software of the Month - Ultimate Collection Shareware 277.iso / pc / PROGRAMS / UTILITY / WINLINUX / DATA1.CAB / programs_-_include / ASM-ALPH.{_4 / CHECKSUM.H < prev    next >
C/C++ Source or Header  |  1999-09-17  |  3KB  |  91 lines

  1. #ifndef _ALPHA_CHECKSUM_H
  2. #define _ALPHA_CHECKSUM_H
  3.  
  4.  
  5. /*
  6.  *    This is a version of ip_compute_csum() optimized for IP headers,
  7.  *    which always checksum on 4 octet boundaries.
  8.  */
  9. extern unsigned short ip_fast_csum(unsigned char * iph, unsigned int ihl);
  10.  
  11. /*
  12.  * computes the checksum of the TCP/UDP pseudo-header
  13.  * returns a 16-bit checksum, already complemented
  14.  */
  15. extern unsigned short int csum_tcpudp_magic(unsigned long saddr,
  16.                        unsigned long daddr,
  17.                        unsigned short len,
  18.                        unsigned short proto,
  19.                        unsigned int sum);
  20.  
  21. unsigned int csum_tcpudp_nofold(unsigned long saddr, unsigned long daddr,
  22.                 unsigned short len, unsigned short proto,
  23.                 unsigned int sum);
  24.  
  25. /*
  26.  * computes the checksum of a memory block at buff, length len,
  27.  * and adds in "sum" (32-bit)
  28.  *
  29.  * returns a 32-bit number suitable for feeding into itself
  30.  * or csum_tcpudp_magic
  31.  *
  32.  * this function must be called with even lengths, except
  33.  * for the last fragment, which may be odd
  34.  *
  35.  * it's best to have buff aligned on a 32-bit boundary
  36.  */
  37. extern unsigned int csum_partial(const unsigned char * buff, int len, unsigned int sum);
  38.  
  39. /*
  40.  * the same as csum_partial, but copies from src while it
  41.  * checksums
  42.  *
  43.  * here even more important to align src and dst on a 32-bit (or even
  44.  * better 64-bit) boundary
  45.  */
  46. unsigned int csum_partial_copy(const char *src, char *dst, int len, unsigned int sum);
  47.  
  48. /*
  49.  * the same as csum_partial, but copies from user space (but on the alpha
  50.  * we have just one address space, so this is identical to the above)
  51.  *
  52.  * this is obsolete and will go away.
  53.  */
  54. #define csum_partial_copy_fromuser csum_partial_copy
  55.  
  56. /*
  57.  * this is a new version of the above that records errors it finds in *errp,
  58.  * but continues and zeros the rest of the buffer.
  59.  */
  60. unsigned int csum_partial_copy_from_user(const char *src, char *dst, int len, unsigned int sum, int *errp);
  61.  
  62. unsigned int csum_partial_copy_nocheck(const char *src, char *dst, int len, unsigned int sum);
  63.  
  64.  
  65. /*
  66.  * this routine is used for miscellaneous IP-like checksums, mainly
  67.  * in icmp.c
  68.  */
  69.  
  70. extern unsigned short ip_compute_csum(unsigned char * buff, int len);
  71.  
  72. /*
  73.  *    Fold a partial checksum without adding pseudo headers
  74.  */
  75.  
  76. static inline unsigned short csum_fold(unsigned int sum)
  77. {
  78.     sum = (sum & 0xffff) + (sum >> 16);
  79.     sum = (sum & 0xffff) + (sum >> 16);
  80.     return ~sum;
  81. }
  82.  
  83. #define _HAVE_ARCH_IPV6_CSUM
  84. extern unsigned short int csum_ipv6_magic(struct in6_addr *saddr,
  85.                                           struct in6_addr *daddr,
  86.                                           __u16 len,
  87.                                           unsigned short proto,
  88.                                           unsigned int sum);
  89.  
  90. #endif
  91.